﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ferreteria.Forms
{
    public partial class frmAgregarCliente : Form
    {
        DisancoEntities context;
        public int? cliente_id;

        bool editando = false;

        bool cuitValido = false;
        bool nombreValido = false;
        bool categoriaValida = false;

        Icon fail = SystemIcons.Error;
        Icon good = SystemIcons.Hand;

        public frmAgregarCliente()
        {
            try
            {
                InitializeComponent();
                context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
                cmbbCliCondIva.DataSource = context.CondicionIVA;
                cmbbCliCondIva.DisplayMember = "condicion_sigla";
                cmbbCliCondIva.ValueMember = "condicion_id";
                cmbbCliCondIva.SelectedItem = null;

                this.mtxbCliCuit.TextChanged += new System.EventHandler(this.mtxbCliCuit_TextChanged);
            }
            catch (Exception er)
            {
                MessageBox.Show(er.Message);
            }
        }

        public frmAgregarCliente(int ClienteID)
        {
            //try
            //{
                InitializeComponent();
                editando = true;
                this.Text = "Modificar datos del cliente";

                context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
                cmbbCliCondIva.DataSource = context.CondicionIVA;
                cmbbCliCondIva.DisplayMember = "condicion_sigla";
                cmbbCliCondIva.ValueMember = "condicion_id";

                this.cuitValido = true;
                //mtxbCliCuit.Enabled = false;

                Clientes cliente = context.Clientes.FirstOrDefault(c => c.cliente_id == ClienteID);

                if (cliente != null)
                {
                    this.cliente_id = ClienteID;

                    txtbCliNombre.Text = cliente.cliente_nombre;
                    txtbCliDireccion.Text = cliente.cliente_direccion;
                    txtbCliUbicacion.Text = cliente.cliente_ubicacion;
                    txtbCLiLocalidad.Text = cliente.cliente_localidad;
                    txtbCliPcia.Text = cliente.cliente_provincia;
                    txtbCliPais.Text = cliente.cliente_pais;
                    txtbCliNroDoc.Text = cliente.cliente_nro_doc;
                    txtbCliTel1.Text = cliente.cliente_tel1;
                    txtbCliTel2.Text = cliente.cliente_tel2;
                    txtbCliFax.Text = cliente.cliente_telefax;
                    mtxbCliCuit.Text = cliente.cliente_cuit;
                    txtbClimail.Text = cliente.cliente_email;
                    txtbCliCP.Text = cliente.cliente_cp;
                    txtbCliTipoDoc.Text = cliente.cliente_tipo_doc;
                    txtbCliTpte.Text = cliente.cliente_transporte;

                    cmbbCliCondIva.SelectedValue = cliente.condicion_id;
                }
            //}
            //catch (Exception er)
            //{
            //    MessageBox.Show(er.Message);
            //}
        }

        void habilitarAceptar()
        {
            if (nombreValido && cuitValido && categoriaValida)
                btnGuardar.Enabled = true;
            else
                btnGuardar.Enabled = false;
        }

        void guardarNuevoCliente()
        {
            //if (verificarCuit())
            //{
                Clientes Cliente = new Clientes();
                Cliente.cliente_nombre = txtbCliNombre.Text;
                Cliente.cliente_direccion = txtbCliDireccion.Text;
                Cliente.cliente_ubicacion = txtbCliUbicacion.Text;
                Cliente.cliente_localidad = txtbCLiLocalidad.Text;
                Cliente.cliente_provincia = txtbCliPcia.Text;
                Cliente.cliente_pais = txtbCliPais.Text;
                Cliente.condicion_id = (int)cmbbCliCondIva.SelectedValue;
                Cliente.cliente_cuit = mtxbCliCuit.Text;
                Cliente.cliente_tipo_doc = txtbCliTipoDoc.Text;
                Cliente.cliente_tel1 = txtbCliTel1.Text;
                Cliente.cliente_tel2 = txtbCliTel2.Text;
                Cliente.cliente_telefax = txtbCliFax.Text;
                Cliente.cliente_email = txtbClimail.Text;
                Cliente.cliente_transporte = txtbCliTpte.Text;
                Cliente.cliente_cp = txtbCliCP.Text;
                Cliente.cliente_nro_doc = txtbCliNroDoc.Text;

                context.AddToClientes(Cliente);
                context.SaveChanges();

                MessageBox.Show("El Cliente ha sido Guardado con Exito ",
                                                      "Disanco Sanitarios", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.cliente_id = Cliente.cliente_id;
                this.Close();
            //}
            //else
            //{
            //    MessageBox.Show("Ya existe un Cliente con ese CUIT", "Disanco Sanitarios", MessageBoxButtons.OK, MessageBoxIcon.Error);
            //    mtxbCliCuit.Select();
            //}
        }

        void modificarCliente()
        {
            Clientes cliente = context.Clientes.FirstOrDefault(c => c.cliente_id == this.cliente_id);

            if (cliente != null)
            {
                cliente.cliente_nombre = txtbCliNombre.Text;
                cliente.cliente_direccion = txtbCliDireccion.Text;
                cliente.cliente_ubicacion = txtbCliUbicacion.Text;
                cliente.cliente_localidad = txtbCLiLocalidad.Text;
                cliente.cliente_provincia = txtbCliPcia.Text;
                cliente.cliente_pais = txtbCliPais.Text;
                cliente.condicion_id = (int)cmbbCliCondIva.SelectedValue;
                cliente.cliente_cuit = mtxbCliCuit.Text;
                cliente.cliente_tipo_doc = txtbCliTipoDoc.Text;
                cliente.cliente_tel1 = txtbCliTel1.Text;
                cliente.cliente_tel2 = txtbCliTel2.Text;
                cliente.cliente_telefax = txtbCliFax.Text;
                cliente.cliente_email = txtbClimail.Text;
                cliente.cliente_transporte = txtbCliTpte.Text;
                cliente.cliente_cp = txtbCliCP.Text;
                cliente.cliente_nro_doc = txtbCliNroDoc.Text;

                context.SaveChanges();
                MessageBox.Show("Los datos del cliente fueron editados correctamente", "Operacion exitosa", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.Close();
            }
            else
            {
                MessageBox.Show("No se pudo recuperar la informacion del cliente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }
        }

        bool verificarCuit()
        {
            string cuit = mtxbCliCuit.Text;

            var query = from cli in context.Clientes
                        where cli.cliente_cuit == cuit
                        select cli;

            if (query.Count() == 0)
                return true;
            else
                return false;
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                if (editando)
                    modificarCliente();
                else
                    guardarNuevoCliente();
            }
            catch (Exception error)
            {
                MessageBox.Show(error.Message);
            }
        }

        private void txtbCliCP_KeyPress(object sender, KeyPressEventArgs e)
        {
            Clases.Validar.ValidarNumeros(e);
        }

        private void txtbCliCuit_KeyPress(object sender, KeyPressEventArgs e)
        {
            Clases.Validar.ValidarNumeros(e);
        }

        private void txtbCliNroDoc_KeyPress(object sender, KeyPressEventArgs e)
        {
            Clases.Validar.ValidarNumeros(e);
        }

        private void txtbCliTel1_KeyPress(object sender, KeyPressEventArgs e)
        {
            Clases.Validar.ValidarNumeros(e);
        }

        private void txtbCliTel2_KeyPress(object sender, KeyPressEventArgs e)
        {
            Clases.Validar.ValidarNumeros(e);
        }

        private void txtbCliFax_KeyPress(object sender, KeyPressEventArgs e)
        {
            Clases.Validar.ValidarNumeros(e);
        }

        private void txtbCliNombre_TextChanged(object sender, EventArgs e)
        {
            if (txtbCliNombre.Text != "")
                nombreValido = true;
            else
                nombreValido = false;

            habilitarAceptar();
        }
        
        private void cmbbCliCondIva_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmbbCliCondIva.SelectedItem != null)
                categoriaValida = true;
            else
                categoriaValida = false;

            habilitarAceptar();
        }

        private void mtxbCliCuit_TextChanged(object sender, EventArgs e)
        {
            string cuit = mtxbCliCuit.Text.Replace("-", "").Replace(" ", "");

            if (cuit.Length == 11)
            {  //if (verificarCuit())
                //{
                cuitValido = true;
                pbCuit.Image = Properties.Resources.icon_ok;
                //}
                //else
                //{
                //    cuitValido = false;
                //    pbCuit.Image = Properties.Resources.icon_error;
            //}
            }
            else
            {
                cuitValido = false;
                pbCuit.Image = null;
            }

            habilitarAceptar();
        }
    }
}
